package com.model.模板;


public abstract class Beverage {
    // 模板方法（final防止子类修改流程）
    public final void prepareRecipe() {
        boilWater();// 煮沸水
        brew();// ---煮
        pourInCup(); // 倒入杯子
        if (customerWantsCondiments()) { // 定制调味
            addCondiments(); // ---添加调味
        }
    }

    // 共用方法
    private void boilWater() {
        System.out.println("煮沸水");
    }
    private void pourInCup() {
        System.out.println("倒入杯子");
    }

    // 抽象方法（必须由子类实现）
    protected abstract void brew();
    protected abstract void addCondiments();

    // 钩子方法（可选覆盖）
    protected boolean customerWantsCondiments() {
        return true;
    }
}

